package com.huihui.utils;

import android.app.Notification;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.widget.ImageView;
import android.widget.RemoteViews;

import com.huihui.R;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.RequestCreator;
import com.squareup.picasso.Transformation;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Summary:加载图片工具类
 * Version 1.0
 * Author: lids@djcars.cn
 * Company: http://www.xincheping.com
 * Date: 2015/10/20
 * Time: 11:47
 * Copyright: Copyright (c) 2015
 */
public class LoadImageUtil {
    private static int DEFAULT_STUB_ID = R.mipmap.seeting_userinfo;
    private static int ERROR_PIC_ID = R.mipmap.seeting_userinfo;

    public static void displayImage(Context context, int resourceId, ImageView imageView) {
        Picasso.with(context)
                .load(resourceId)
                .fit()
                .error(ERROR_PIC_ID)
                .into(imageView);

    }

    public static void displayImage(Context context, File file, ImageView imageView) {
        Picasso.with(context)
                .load(file)
                .error(ERROR_PIC_ID)
                .into(imageView);

    }

    public static void displayImage(Context context, Uri uri, ImageView imageView) {
        displayImage(context, uri, imageView, true);
    }

    /**
     * 显示大图片
     *
     * @param context   上下文
     * @param uri       资源Uri
     * @param imageView imageView实例
     */
    public static void displayBigImage(Context context, Uri uri, ImageView imageView) {
        Picasso.with(context)
                .load(uri)
                // .resize(400,5000)
                // .centerInside()
                .error(ERROR_PIC_ID)
                .into(imageView);
    }

    /**
     * 显示大图片
     *
     * @param context   上下文
     * @param uri       资源Uri
     * @param imageView imageView实例
     * @param callback  加载图片的回调
     */
    public static void displayBigImage(Context context, Uri uri, ImageView imageView, Callback callback) {
        Picasso.with(context)
                .load(uri)
                .placeholder(DEFAULT_STUB_ID)
                .error(ERROR_PIC_ID)
                .into(imageView, callback);
    }

    public static void displayImage(Context context, Uri uri, ImageView imageView, boolean isFit) {
        displayImage(context, uri, imageView, isFit, ImageView.ScaleType.FIT_XY);
    }

    /**
     * 显示图片
     *
     * @param context   上下文
     * @param uri       图片Uri
     * @param imageView 显示图片的ImageView
     */
    public static void displayImage(Context context, Uri uri, ImageView imageView, boolean isFit,
                                    ImageView.ScaleType scaleType) {
        if (uri == null) {
            return;
        }
        RequestCreator requestCreator = Picasso.with(context)
                .load(uri);
        if (isFit) {
            requestCreator = requestCreator.fit();
        }
        switch (scaleType) {
            case CENTER_CROP:
                requestCreator = requestCreator.centerCrop();
                break;
            case CENTER_INSIDE:
                requestCreator = requestCreator.centerInside();
                break;
            default:
                break;
        }
        requestCreator.placeholder(DEFAULT_STUB_ID)
                .error(ERROR_PIC_ID)
                .into(imageView);
    }

    /**
     * 显示图片
     *
     * @param context    上下文
     * @param url        图片Url
     * @param imageView  显示图片的ImageView
     * @param reqWidth   需要的宽度
     * @param reqHeight  需要的高度
     * @param defaultRes 默认显示的图片Id
     */
    public static void displayImage(Context context, String url, ImageView imageView, int reqWidth,
                                    int reqHeight, int defaultRes) {
        if (TextUtils.isEmpty(url)) {
            return;
        }
        Picasso.with(context)
                .load(url)
                .resize(reqWidth, reqHeight)
                .placeholder(defaultRes)
                .error(ERROR_PIC_ID)
                .into(imageView);
    }

    /**
     * 显示图片
     *
     * @param context     上下文
     * @param url         图片Url
     * @param imageView   显示图片的ImageView
     * @param defDrawable 默认显示的图片Id
     */
    public static void displayImage(Context context, String url, ImageView imageView,
                                    Drawable defDrawable) {
        if (TextUtils.isEmpty(url)) {
            imageView.setImageDrawable(defDrawable);
            return;
        }
        Picasso.with(context)
                .load(url)
                .fit()
                .placeholder(defDrawable)
                .error(ERROR_PIC_ID)
                .into(imageView);
    }

    /**
     * 显示图片
     *
     * @param context    上下文
     * @param url        图片Url
     * @param imageView  显示图片的ImageView
     * @param defaultRes 默认显示的图片Drawable
     */
    public static void displayImage(Context context, String url, ImageView imageView, int defaultRes) {
        if (TextUtils.isEmpty(url) || imageView == null) {
            return;
        }

        Picasso.with(context)
                .load(url)
                .fit()
                .placeholder(defaultRes)
                .error(defaultRes)
                .into(imageView);
    }

    public static void displayImage(Context context, String url, ImageView imageView, int defaultRes, int errorRes) {
        if (TextUtils.isEmpty(url)) {
            imageView.setImageResource(defaultRes);
            return;
        }

        Picasso.with(context)
                .load(url)
                .fit()
                .placeholder(defaultRes)
                .error(errorRes)
                .into(imageView);
    }

    /**
     * 显示图片
     *
     * @param context    上下文
     * @param url        图片Url
     * @param imageView  显示图片的ImageView
     * @param defaultRes 默认显示的图片Id
     * @param scaleType  ScaleType
     */
    public static void displayImage(Context context, String url, ImageView imageView, int defaultRes,
                                    ImageView.ScaleType scaleType) {
        if (TextUtils.isEmpty(url)) {
            return;
        }
        RequestCreator requestCreator = Picasso.with(context)
                .load(url);
        switch (scaleType) {
            case CENTER_CROP:
                requestCreator.centerCrop().resize(imageView.getWidth(), imageView.getHeight());
                break;
            case CENTER_INSIDE:
                requestCreator.centerInside().resize(imageView.getWidth(), imageView.getHeight());
                break;
            default:
                requestCreator.fit();
                break;
        }
        requestCreator
                .placeholder(defaultRes)
                .error(defaultRes)
                .into(imageView);
    }

    /**
     * 显示图片
     *
     * @param context    上下文
     * @param url        图片Url
     * @param imageView  显示图片的ImageView
     * @param defaultRes 默认显示的图片Drawable
     * @param callback   回调函数
     */
    public static void displayImage(Context context, String url, ImageView imageView,
                                    int defaultRes, Callback callback) {
        if (TextUtils.isEmpty(url)) {
            return;
        }
        Picasso.with(context)
                .load(url)
                .fit()
                .placeholder(defaultRes)
                .error(ERROR_PIC_ID)
                .into(imageView, callback);
    }

    /**
     * 显示图片
     *
     * @param context   上下文
     * @param url       图片Url
     * @param imageView 显示图片的ImageView
     * @param callback  回调函数
     */
    public static void displayImage(Context context, String url, ImageView imageView, Callback callback) {
        displayImage(context, url, imageView, DEFAULT_STUB_ID, callback);
    }

    /**
     * 显示图片
     *
     * @param context    上下文
     * @param url        图片Url
     * @param imageView  显示图片的ImageView
     * @param defaultRes 默认显示的图片Drawable
     * @param isCrop     是否修剪图片
     */
    public static void displayImage(Context context, String url, ImageView imageView, int defaultRes, boolean isCrop) {
        if (TextUtils.isEmpty(url)) {
            return;
        }
        RequestCreator requestCreator = Picasso.with(context)
                .load(url)
                .fit()
                .placeholder(defaultRes)
                .error(ERROR_PIC_ID);


        requestCreator.into(imageView);
    }

    /**
     * 显示图片
     *
     * @param context   上下文
     * @param url       图片Url
     * @param imageView 显示图片的ImageView
     */
    public static void displayImage(Context context, String url, ImageView imageView) {
        if (TextUtils.isEmpty(url)) {
            return;
        }
        Picasso.with(context)
                .load(url)
                .fit()
                .placeholder(DEFAULT_STUB_ID)
                .error(ERROR_PIC_ID)
                .into(imageView);

    }
    public static void displayImagePreview(Context context, String url, ImageView imageView, int defaultRes, boolean isCrop) {
        if (TextUtils.isEmpty(url)) {
            return;
        }
        Picasso.with(context)
                .load(url)
                .placeholder(DEFAULT_STUB_ID)
                .error(ERROR_PIC_ID)
                .placeholder(defaultRes)
                .into(imageView);

    }
    public static void displayJuxingImage(Context context, String url, ImageView imageView) {
        if (TextUtils.isEmpty(url)) {
            return;
        }

        Picasso.with(context)
                .load(url)
                .transform(new RoundTransform(4))
                .placeholder(DEFAULT_STUB_ID)
                .error(ERROR_PIC_ID)
                .into(imageView);

    }

    /**
     * 显示图片
     *
     * @param context        上下文
     * @param url            图片Url
     * @param reqWidth       需要的宽度
     * @param reqHeight      需要的高度
     * @param remoteViews    远程View
     * @param viewId         显示图片的远程View的Id
     * @param notificationId 通知Id
     * @param notification   通知实例
     */
    public static void displayImage(Context context, String url, int reqWidth, int reqHeight,
                                    RemoteViews remoteViews, int viewId, int notificationId,
                                    Notification notification) {
        if (TextUtils.isEmpty(url)) {
            return;
        }
        Picasso.with(context)
                .load(url)
                .resize(reqWidth, reqHeight)
                .placeholder(DEFAULT_STUB_ID)
                .error(ERROR_PIC_ID)
                .into(remoteViews, viewId, notificationId, notification);
    }


    public interface OnInputStreamReadyListener {
        void onReady(String strFileName);
    }

    public interface OnImageType {
        void onType(int type);
    }

}
